#　　　　　　6131285650b55cdd28c30a402e83f1df
git config --global user.name "于宏宇"
git config --global user.email "13965515+yu-hongyu1664@user.noreply.gitee.com"


# 我是第版本

#

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
选择排序算法实现
作者: AI助手
"""

def selection_sort(arr):
    """
    选择排序算法
    
    工作原理：
    1. 从未排序序列中找到最小元素
    2. 将其放到已排序序列的末尾
    3. 重复以上步骤，直到所有元素均排序完毕
    
    参数:
        arr (list): 待排序的列表
    
    返回:
        list: 排序后的列表
    """
    # 创建输入列表的副本，避免修改原列表
    arr = arr.copy()
    n = len(arr)
    
    # 外层循环，i表示已排序序列的末尾位置
    for i in range(n):
        # 假设当前位置的元素为最小值
        min_idx = i
        
        # 在未排序序列中寻找最小值
        for j in range(i + 1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j
        
        # 将找到的最小值放到已排序序列的末尾
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    
    return arr


def print_sorting_process(arr):
    """
    演示选择排序的过程
    
    参数:
        arr (list): 待排序的列表
    """
    print(f"原始数组: {arr}")
    arr = arr.copy()
    n = len(arr)
    
    for i in range(n):
        print(f"\n第 {i + 1} 轮排序:")
        min_idx = i
        
        print(f"  查找位置 {i} 后的最小元素...")
        
        # 在未排序序列中寻找最小值
        for j in range(i + 1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j
                print(f"  找到新的最小值 {arr[min_idx]} 在位置 {min_idx}")
        
        # 如果找到了更小的元素，则交换
        if min_idx != i:
            print(f"  交换位置 {i} 的元素 {arr[i]} 和位置 {min_idx} 的元素 {arr[min_idx]}")
            arr[i], arr[min_idx] = arr[min_idx], arr[i]
        else:
            print(f"  位置 {i} 的元素 {arr[i]} 已经是最小的，无需交换")
        
        print(f"  本轮结果: {arr}")
    
    print(f"\n最终结果: {arr}")


def main():
    """
    主函数，测试选择排序算法
    """
    print("=" * 50)
    print("选择排序算法演示")
    print("=" * 50)
    
    # 测试数据
    test_array = [64, 34, 25, 12, 22, 11, 90]
    
    print(f"原始数组: {test_array}")
    
    # 使用选择排序
    sorted_array = selection_sort(test_array)
    print(f"排序后数组: {sorted_array}")
    
    # 通过比较自定义排序结果和Python内置排序函数结果来验证排序是否正确
    if sorted_array == sorted(test_array):
        print("✓ 排序结果正确")  # 如果结果一致，打印正确标记
    else:
        print("✗ 排序结果错误")  # 如果结果不一致，打印错误标记
    
    # 打印分隔线和标题
    print("\n" + "=" * 50)  # 打印50个等号作为分隔线
    print("排序过程详细演示")  # 打印演示标题
    print("=" * 50)  # 再次打印分隔线
    
    # 调用print_sorting_process函数演示排序的详细过程
    print_sorting_process(test_array)  # 传入测试数组，展示每一步排序操作


# 当程序作为主程序运行时执行main函数
if __name__ == "__main__":  # Python的标准入口点判断
    main()  # 调用main函数开始程序执行


